package main

import (
	"fmt"
	"runtime"
	"time"
)

const CPUS = 4
func main() {
	runtime.GOMAXPROCS(CPUS)
	start := time.Now()
	DoAll()
	end := time.Now()
	fmt.Println("cost is:", end.Sub(start))
}

func DoAll() {
	sem := make(chan int, CPUS)	//定义长度为4的通道
	for i := 0; i < CPUS; i++ {
		//go DoPart(sem)
		DoPart(sem)
	}

	for i := 0; i < CPUS; i++ {
		<- sem	//等待通道数据完成
	}
	// 所有任务完成
}

func DoPart(sem chan int) {
	fmt.Println("hello")
	// 模拟代码执行
	time.Sleep(3 * time.Second)

	sem <- 1	//向通道写入数据表明执行完成
}
